package com.wx.activitys.drp.Utils;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;

public class DoubleUtil  implements Serializable  {

	private static final long serialVersionUID = -3345205828566485102L;
	     /**
	      * 提供精确的加法运算。
	      *
	      * @param value1 被加数
	      * @param value2 加数
	      * @return 两个参数的和
	      */
	    public static Double add(Double value1, Double value2) {
	         BigDecimal b1 = new BigDecimal(Double.toString(value1));
	         BigDecimal b2 = new BigDecimal(Double.toString(value2));
	         return b1.add(b2).doubleValue();
	     }
	 
	     /**
	      * 提供精确的减法运算。
	      *
	      * @param value1 被减数
	      * @param value2 减数
	     * @return 两个参数的差
	     */
	     public static double sub(Double value1, Double value2) {
	         BigDecimal b1 = new BigDecimal(Double.toString(value1));
	         BigDecimal b2 = new BigDecimal(Double.toString(value2));
	         return b1.subtract(b2).doubleValue();
	     }
	 
	     /**
	      * 提供精确的乘法运算。
	      *
	      * @param value1 被乘数
	      * @param value2 乘数
	      * @return 两个参数的积
	      */
	     public static Double mul(Double value1, Double value2) {
	         BigDecimal b1 = new BigDecimal(Double.toString(value1));
	         BigDecimal b2 = new BigDecimal(Double.toString(value2));
	         return b1.multiply(b2).doubleValue();
	     }

     /**
	      * 提供指定数值的（精确）小数位四舍五入处理。
	      *
	      * @param value 需要四舍五入的数字
	      * @param scale 小数点后保留几位
	      * @return 四舍五入后的结果
	      */
	     public static double round(double value,int scale){
	         if(scale<0){
	             throw new IllegalArgumentException("The scale must be a positive integer or zero");
	         }
	         BigDecimal b = new BigDecimal(Double.toString(value));
	         BigDecimal one = new BigDecimal("1");
	         return b.divide(one,scale, RoundingMode.HALF_UP).doubleValue();
	     }
	
}
